package com.xframe.xdal.core.model.mapping;


import com.xframe.xdal.core.autofill.IAutoFillBean;

import java.util.List;

/**
 * 功能描述:数据源表结构列信息描述接口
 *
 * @author xufeng
 * @version 1.0
 * @date 2023-03-20
 */
public interface IColumnMapping {

    /**
     * 获取字段映射的名称
     *
     * @return 名称
     */
    String getName();


    /**
     * 获取类型上字段原始变量的名称
     *
     * @return 名称
     */
    String getFieldName();

    /**
     * 主键标注位
     *
     * @return true 是  false 否
     */
    boolean getPrimaryKeyFlag();

    /**
     * 是否是唯一标识
     *
     * @return true 是 false 否
     */
    boolean getUniqueFlag();

    /**
     * 唯一标识名字(名字相同的是一组)
     */
    String getUniqueName();

    /**
     * 是否使用数据库表达式标识
     *
     * @return true 是 false 否
     */
    boolean getUseDbObjectFlag();

    /**
     * 获取数据库表达式
     *
     * @return string
     */
    String getDbExpression();

    /**
     * 获取数据的类型Class对象
     *
     * @return
     */
    Class<?> getDataType();

    /**
     * 获取列的定义的长度
     *
     * @return int
     */
    Integer getLength();

    /**
     * 是否删除标记
     *
     * @return true 是 false 否
     */
    boolean getDeleteFlag();

    /**
     * 是否是空
     *
     * @return true 是 false 否
     */
    boolean getNullFlag();

    /**
     * 是否自动生成
     *
     * @return true 是 false 否
     */
    boolean getDbGeneratedFlag();

    /**
     * 是否版本字段
     *
     * @return true 是 false 否
     */
    boolean getVersionFlag();


    /**
     * 获取列描述
     *
     * @return string
     */
    String getDesc();


    /**
     * 是否是只读,不准修改
     *
     * @return true 是  false 否
     */
    boolean getReadonly();

    /**
     * 获取唯一键名称
     *
     * @return 唯一键名称
     */
    String getAkGroupName();

    /**
     * 获得小数点位数
     *
     * @return 小数点位数
     */
    Integer getScale();

    /**
     * 获得对该列上自动填充对象列表
     *
     * @return 自动填充对象列表
     */
    List<IAutoFillBean> getAutoFillBeanList();
}
